package com.example.controller;

import com.example.entity.ServiceApplication;
import com.example.entity.User;
import com.example.service.ServiceApplicationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 管理员应用控制器，处理服务申请的管理请求
 */
@Controller
@RequestMapping("/application")
public class AdminApplicationController {
    // 自动注入服务申请服务
    @Autowired
    private ServiceApplicationService applicationService;

    /**
     * 获取待审核的服务申请列表
     * @param model 用于向视图传递数据
     * @return 显示申请列表的页面路径
     */
    @GetMapping("/list")
    public String listPendingApplications(Model model) {
        // 调用服务获取待审核的申请列表
        List<ServiceApplication> applications = applicationService.getPendingApplications();

        // 将申请列表添加到模型中，以便在视图中显示
        model.addAttribute("applications", applications);

        return "application/list";
    }

    /**
     * 查看单个服务申请的详情
     * @param id 申请的ID
     * @param model 用于向视图传递数据
     * @return 显示申请详情的页面路径
     */
    @GetMapping("/{id}")
    public String viewApplication(@PathVariable Integer id, Model model) {
        // 调用服务根据ID获取申请信息
        ServiceApplication application = applicationService.getApplicationById(id);

        // 将申请信息添加到模型中，以便在视图中显示
        model.addAttribute("application", application);

        return "application/detail";
    }

    /**
     * 审核服务申请
     * @param id 申请的ID
     * @param status 审核状态
     * @param comment 审核评论
     * @param session Http会话，用于获取管理员信息
     * @return 审核结果的重定向路径
     */
    @PostMapping("/review/{id}")
    @ResponseBody
    public String reviewApplication(
            @PathVariable Integer id,
            @RequestParam String status,
            @RequestParam(required = false) String comment,
            HttpSession session) {

        // 从session获取管理员信息
        User admin = (User) session.getAttribute("admin_user");

        // 检查管理员是否登录，如果未登录则提示登录
        if (admin == null) {
            return "请先登录";
        }

        // 调用服务审核申请
        applicationService.reviewApplication(id, admin.getUser_id(), status, comment);

        // 根据审核状态返回相应的重定向路径
        if ("APPROVED".equals(status)) {
            return "/home/admin";
        } else {
            return "/home/admin";
        }
    }
}